package com.wanban.downloader.proxy;

import android.util.Log;

import com.wanban.downloader.utils.FileDownloadPathUtils;
import com.wanban.downloader.utils.nano.NanoHTTPD;

import java.io.File;
import java.io.FileInputStream;
import java.util.Locale;

public class LocalServer extends NanoHTTPD {

    private static final String TAG = "LocalServer";
    /**
     * m3u8的文件格式
     */
    private static final String MIME_TYPE_M3U8 = "video/x-mpegURL";

    // 端口号
    public static final int PORT = 10222;


    /**
     * 构造方法
     */
    public LocalServer() {
        // 端口号
        super(PORT, NanoHTTPD.DEFAULT_HOST_NAME);
        Log.d(TAG, "---CcLocalServer---");
    }

    /**
     * 通过本地文件的地址，获取本地http的地址
     * @param proxyM3U8Path
     * @return
     **/
    public String getProxyUrl(String proxyM3U8Path){
        try {
            // 开启本地代理
            if (!isAlive() || !wasStarted()) {
                stop();
                start();
                Log.d(TAG, "---代理服务器启动---");
            }
        } catch (Exception e) {
            e.printStackTrace();
            Log.e(TAG, "代理服务器启动失败 =>" + e.getMessage());
        }
        return String.format(Locale.getDefault(), "http://" + NanoHTTPD.DEFAULT_HOST_NAME +  ":%d%s", getPort(), proxyM3U8Path);
    }

    /**
     * 重写 serve 方法，获取本地视频文件
     * @param session The HTTP session
     * @return
     */
    @Override
    public Response serve(IHTTPSession session) {
        // 获取请求的url
        String url = session.getUri();
        Log.d(TAG, "请求URL：" + url);
        try {
            File file = new File(url);
            //判断本地的文件是否存在
            if (file.exists()) {
                //直接返回m3u8的文件格式
                return newChunkedResponse(Response.Status.OK, MIME_TYPE_M3U8, new FileInputStream(file));
            } else {
                return newFixedLengthResponse(Response.Status.NOT_FOUND, "text/html", "文件不存在：" + url);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return newFixedLengthResponse(Response.Status.NOT_FOUND, "text/html", "文件不存在：" + url);
        }
    }
}
